fix(web): operator UI a11y fixes + peer-facts parity checkpoint (1.2, unreleased)#5
Merged
Merged
Conversation
Resolves the 9 Major findings (+ folded Minors) from the 2026-06-28 operator web-UI design review of the server-rendered Starlette/HTMX surface: - Adopt site-kit linen/ink/brass tokens (closes brand drift); style banners, queue cards, type badges, primary vs secondary buttons, .muted/.warn/.big-number. - Full-page error chrome on navigation, bare fragment on HX-Request; the global pending-badge context processor is failure-safe so a launch-time ctx failure can no longer naked-500 the error page (regression caught in review, now tested). - 44px action targets; eliminate 320px horizontal reflow; drift badge 3.39->5.11:1. - Global pending-review badge on every page (Jinja context processor). - Intent orphans as linked titles (zero-count sections hidden); Corpus New-requirement affordance; visible auto-dismissing success toast; confidence low/med/high chips; explicit focus-visible ring. - Tests for the new behavior. make ci green (91.14% coverage), wardline clean. Also includes pre-existing working-tree edits bundled per request: legis instructions marker bump in AGENTS.md/CLAUDE.md (v1.1.1->v1.3.0) and .gitignore ignoring .wardline/. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- docs/handoffs/2026-06-28-web-ux-design-review.md: the operator web-UI design review (Playwright-driven, with the same-day resolution note recording the fixes). - docs/handoffs/2026-06-28-lacuna-peer-facts-tour-demos-tasking.md: lacuna handoff. - docs/arch-analysis-2026-06-28-0751/ replaces docs/arch-analysis-2026-06-21-1754/: a refreshed system-archaeologist run (concurrent output, not part of the web work; included per request to commit all changed files). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…e checkpoint; PDR-015 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…ry page Two a11y review fixes on the operator UI: - Visited primary anchors: the global `a:visited` rule (0,1,1) outspecified `.btn--primary` (0,1,0), flipping the "New requirement" link's text to --link on the brass fill (~1.7:1, fails WCAG AA) after navigation. Re-assert --text-on-accent for anchor primaries at higher specificity. Plain <button> primaries are unaffected (no :visited state). - Stuck success toast: the auto-dismiss timer lived inside review.html's `.qi-actions` focus guard, so the confirm-step flows (drifted-accept, reject, draft-approve) — whose forms sit outside .qi-actions — and the requirement dossier (which loads no page script at all) left the toast on screen forever. Moved the dismiss to base.html so it fires on any page when #toast is filled; review.html keeps only its focus management. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Brings the outstanding
feat/lacuna-peer-facts-tour-cli-paritybranch ontomain. All additive and backward-compatible; targets the unreleased 1.2 (no version bump, not yet published). Four commits across three threads:9f00ae0— Operator UI UX + a11y overhaul. Adopts the site-kit design tokens; contrast, focus-ring, and target-size fixes across the web operator UI.4c12d7f— Docs. Web UX design review, arch-analysis refresh, handoffs.6c0f89a— Peer-facts CLI/MCP parity checkpoint. Product metrics, state checkpoint, and PDR-015 for the peer-facts CLI parity (the parity code already landed on main; recorded under CHANGELOG[Unreleased]).a15adb1— Web a11y review fixes (this session):a:visitedrule (specificity 0,1,1) outspecified.btn--primary(0,1,0), flipping the "New requirement" link's text to--linkon the brass fill (~1.7:1 — fails WCAG AA) once visited. Re-asserts--text-on-accentfor anchor primaries at higher specificity. Plain<button>primaries are unaffected (no:visitedstate).review.html's.qi-actionsfocus guard, so the confirm-step queue flows (drifted-accept, reject, draft-approve) — whose forms sit outside.qi-actions— and the requirement dossier (which loads no page script) left the success toast on screen indefinitely. Moved the dismiss tobase.htmlso it fires whenever#toastis filled;review.htmlkeeps only its focus management.Verification
make cigreen locally: ruff + mypy (strict), 378 passed, 91.14% coverage (≥90% gate).🤖 Generated with Claude Code